import 'package:get/get.dart';
import 'package:rjpb/page/home/inspection/apis/inspection_service.dart';
import 'package:rjpb/page/home/inspection/controller/chart_controller.dart';
import 'dart:convert'; // 用于解析 JSON
import 'package:flutter/services.dart'; // 用于加载本地文件

class InspectionPageController extends GetxController {
  final rows = <Map<String, dynamic>>[].obs; // 存储数据
  final _currentPage = 1.obs; // 当前页码
  final _isLoading = false.obs; // 是否正在加载数据
  final _hasMore = true.obs; // 是否还有更多数据

  var menuData = <Map<String, dynamic>>[].obs; // 菜单数据
  var isLoading = false.obs; // 加载状态
  var selectedMenuId = ''.obs; // 当前选中的菜单项 ID
  final empty = Rx<bool>(false); //判断巡检左侧下面的数据是不是为空
  final MenuDataEmpty = Rx<bool>(false); //判断三级菜单的数据是不是为空
  var selectedSvgString = ''.obs; // 用于存储选中菜单项的SVG字符串
  var pointData = <Map<String, dynamic>>[].obs; // 用于存储svg图对应的点位信息
  var isLoadingSvg = false.obs; // 右侧SVG 图加载状态

  // 一级缓存：内存缓存
  final _svgCache = <String, String>{};

  @override
  void onInit() {
    super.onInit();
    loadInitialData(); // 初始化加载数据
  }

  // 初始化加载数据
  void loadInitialData() async {
    _currentPage.value = 1;
    rows.clear();
    _hasMore.value = true;
    await _fetchData();
  }

  // 加载更多数据
  void loadMoreData() async {
    if (_isLoading.value || !_hasMore.value) return;
    _currentPage.value++;
    await _fetchData();
  }

  // 请求数据
  // Future<void> _fetchData() async {
  //   _isLoading.value = true;
  //   try {
  //     final response = await InspectionService.fetchInspectionData(
  //       pageNum: _currentPage.value,
  //       pageSize: 10,
  //     );
  //     if (response['code'] == 200) {
  //       final newRows = response['rows'] as List<dynamic>;
  //       if (newRows.isEmpty) {
  //         _hasMore.value = false; // 没有更多数据
  //       } else {
  //         rows.addAll(newRows.cast<Map<String, dynamic>>());
  //       }
  //       empty.value = newRows.isEmpty;
  //     } else {
  //       Get.snackbar('错误', response['msg'] ?? '加载失败');
  //     }
  //   } catch (e) {
  //     Get.snackbar('错误', '请求失败，请检查网络');
  //   } finally {
  //     _isLoading.value = false;
  //   }
  // }

  Future<void> _fetchData() async {
    _isLoading.value = true;
    try {
      final response = await InspectionService.fetchInspectionData(
        pageNum: _currentPage.value,
        pageSize: 10,
      );
      print("重要 数据: ${response}");
      if (response['code'] == 200) {
        final newRows = response['rows'] as List<dynamic>;

        // 如果是第一页，清空旧数据
        if (_currentPage.value == 1) {
          rows.clear();
        }

        // 判断是否还有更多数据
        if (newRows.isEmpty || newRows.length < 10) {
          _hasMore.value = false; // 没有更多数据
        }

        // 添加新数据
        if (newRows.isNotEmpty) {
          rows.addAll(newRows.cast<Map<String, dynamic>>());
        }

        // 更新空状态
        empty.value = rows.isEmpty;
      } else {
        empty.value = rows.isEmpty;
        Get.snackbar('错误', response['msg'] ?? '加载失败');
      }
    } catch (e) {
      empty.value = rows.isEmpty;
      Get.snackbar('错误', '请求失败，请检查网络');
    } finally {
      _isLoading.value = false;
    }
  }

  // 列表项点击事件
  void onListItemTap(int index) {
    final selectedItem = rows[index];
    print('选中项: $selectedItem');
  }

  /// 三级菜单数据
  Future<void> loadMenuData() async {
    isLoading.value = true;
    try {
      final data = await InspectionService.fetchMenuData();
      menuData.value = data;
      MenuDataEmpty.value = menuData.isEmpty;
    } catch (e) {
      print("加载菜单数据异常: $e");
      // menuData.value = [];
      MenuDataEmpty.value = menuData.isEmpty;
    } finally {
      isLoading.value = false;
      MenuDataEmpty.value = menuData.isEmpty;
    }
  }

  /// 菜单项选中逻辑
  void onMenuItemSelected(String id) async {
    selectedMenuId.value = id;
    print('选中菜单项 ID: $id');

    // 开始加载，显示加载动画
    isLoadingSvg.value = true;

    try {
      // 请求接口获取 SVG 字符串
      // final svgString = await InspectionService.fetchSvgData(id);
      // if (svgString != null) {
      //   selectedSvgString.value = svgString;
      //   print('获取到的 SVG 字符串: $svgString');
      // } else {
      //   selectedSvgString.value = ''; // 如果请求失败，清空 SVG 字符串
      //   print('未获取到 SVG 字符串');
      // }
      if (_svgCache.containsKey(id)) {
        print('【SVG使用缓存】');
        selectedSvgString.value = _svgCache[id]!;
      } else {
        print('【SVG强制刷新】');
        if (id == '8bcz8e94ex73ltbqieghye90c1m91iq2') {
          final svgString = await _loadLocalSvgString(id);
          if (svgString != null) {
            selectedSvgString.value = svgString;
            _svgCache[id] = svgString;
          }
        } else {
          final svgString = await InspectionService.fetchSvgData(id);
          if (svgString != null) {
            selectedSvgString.value = svgString;
            _svgCache[id] = svgString;
          }
        }
      }

      // 请求接口获取点位信息
      final points = await InspectionService.fetchPointData(id);
      pointData.value = points;
      print('获取到的点位数据: $points');
      // 更新饼图数据
      updateChartData();
    } catch (e) {
      print('加载 SVG 或点位数据失败: $e');
    } finally {
      // 加载完成，隐藏加载动画
      isLoadingSvg.value = false;
    }
  }

  //加载本地svg
  Future<String?> _loadLocalSvgString(String id) async {
    try {
      // 加载本地 JSON 文件
      final String jsonString =
          await rootBundle.loadString('assets/svgs/local_svg_data.json');
      final Map<String, dynamic> svgData = json.decode(jsonString);

      // 根据 ID 获取对应的 SVG 字符串
      return svgData[id] as String?;
    } catch (e) {
      print('加载本地 SVG 数据失败: $e');
      return null;
    }
  }

  //饼图数据更新
  void updateChartData() async {
    print("更新饼图数据 ${pointData}");
    var normalCount = pointData
        .where((point) => point['patrolMark'].toString() == '1')
        .length;
    var uncheckedCount = pointData
        .where((point) => point['patrolMark'].toString() == '2')
        .length;
    var abnormalCount = pointData
        .where((point) =>
            point['patrolMark'].toString() == '4' ||
            point['patrolMark'].toString() == '3')
        .length;

    // 如果所有计数都为 0，则请求接口获取统计数据
    if (normalCount == 0 && abnormalCount == 0 && uncheckedCount == 0) {
      try {
        final response = await InspectionService.fetchHomePageStatistics();
        print("获取统计数据: $response");
        if (response != null && response.isNotEmpty) {
          final data = response;
          normalCount = data['normal'] ?? 0;
          abnormalCount = data['repair'] ?? 0;
          uncheckedCount = data['unexamined'] ?? 0;
        } else {
          print("获取统计数据失败: ${response['msg']}");
        }
      } catch (e) {
        print("请求统计数据接口失败: $e");
      }
    }
    print("正常点位数量: $normalCount");
    print("异常点位数量: $abnormalCount");
    print("未巡检点位数量: $uncheckedCount");

    // 更新 ChartController 的数据
    Get.find<ChartController>()
        .updateData(normalCount, abnormalCount, uncheckedCount);
  }

  //根据所点击的点位id获取气泡框需要展示的信息
  // Future<String> fetchTooltipContent(
  //     int patrolMark, String patrolItemId) async {
  //   try {
  //     String? response;
  //     if (patrolMark == 1 || patrolMark == 2) {
  //       // 1 正常  2 未测
  //       response = await InspectionService.findInspectedPatrolItemByLocId(
  //           patrolItemId);
  //     } else if (patrolMark == 3 || patrolMark == 4) {
  //       // 3 超时 4 异常
  //       response =
  //           await InspectionService.findFaultPatrolItemByLocId(patrolItemId);
  //     } else {
  //       return '未知的 patrolMark 值';
  //     }

  //     // 检查响应并提取 data 字段
  //     if (response != null) {
  //       return response; // 返回 data 字段内容
  //     } else {
  //       return '未获取到有效的数据';
  //     }
  //   } catch (e) {
  //     return '获取数据失败: $e';
  //   }
  // }
  // Future<String> fetchTooltipContent(
  //     String patrolMark, String patrolItemId) async {
  //   try {
  //     Map<String, dynamic>? response;
  //     if (patrolMark == '1' || patrolMark == '2') {
  //       // 1 已巡  2 未巡检
  //       response = await InspectionService.findInspectedPatrolItemByLocId(
  //           patrolItemId);
  //       print("正常和未测的巡检项数据: $response");
  //     } else if (patrolMark == '3' || patrolMark == '4') {
  //       // 3 超时（无超时 超时属于未巡检 后端已经处理了） 4 异常
  //       response =
  //           await InspectionService.findFaultPatrolItemByLocId(patrolItemId);
  //       print("超时和异常的巡检项数据: $response");
  //     } else {
  //       return '未知的 patrolMark 值';
  //     }

  //     // 检查响应并提取 data 字段
  //     if (response != null) {
  //       return response; // 根据需要提取字段
  //     } else {
  //       return '未获取到有效的数据';
  //     }
  //   } catch (e) {
  //     return '获取数据失败: $e';
  //   }
  // }

  Future<Map<String, dynamic>?> fetchTooltipContent(
      String patrolMark, String patrolItemId) async {
    try {
      Map<String, dynamic>? response;
      if (patrolMark == '1' || patrolMark == '2') {
        // 1 已巡  2 未巡检
        response = await InspectionService.findInspectedPatrolItemByLocId(
            patrolItemId);
        print("正常和未测的巡检项数据: $response");
      } else if (patrolMark == '3' || patrolMark == '4') {
        // 3 超时 4 异常
        response =
            await InspectionService.findFaultPatrolItemByLocId(patrolItemId);
        print("超时和异常的巡检项数据: $response");
      } else {
        return null; // 未知的 patrolMark 值
      }

      // 返回整个响应对象
      return response;
    } catch (e) {
      print("获取数据失败: $e");
      return null;
    }
  }
}
